# -*- coding: latin-1 -*-
from django.db import models
from tjango.calculated.calculatedfields import *
from gestion.contactos.models import *
from tjango.autocomplete.autocompletefields import *
from gestion.fondos.models import *


class Pago(FormaDePago):
	es_ingreso = models.BooleanField()
	fecha = models.DateField()
	hora = models.TimeField(auto_now_add=True)
	comprobante = models.CharField(max_length=13,blank=True,null=True)
	descuento = models.FloatField(blank=True, null=True)
	recargo = models.FloatField(blank=True, null=True)
	es_ingreso = models.BooleanField()
	total = CalculatedField(models.FloatField, blank=True, null=True)
	#total: definido en los hijos (usa descuento y recarga)
	#pagado: hereda de FormaDePago
	
	saldo = CalculatedField(models.FloatField,source=['pagado','total'], js="total - pagado", blank=True, null=True) 
	
	def __unicode__(self):
		return str(self.comprobante)
	def get_fecha(self):
		return "%s" % self.fecha.strftime("%d/%m/%Y")
	
	def get_saldo(self):
		result = float(self.saldo)
		for pago in self.pagos.all():
			result -= float(pago.importe)
		return float("%.2f" % result)
        def get_tipo(self):
          return "Pago"
        
        def save(self):
          self.es_ingreso = self.get_ingreso()
          super(Pago, self).save()

        def get_ingreso(self):
           # definirla en cada hijo
           pass

	def con_saldo(self):
		if abs(self.get_saldo())>0.01:
			return True
		else:
			return False

ss = u'''
	var a=0;
	var j = 0;
	var b=0;
	for(j=0;j< parseInt($('#id_items-TOTAL_FORMS').val());j++)
	{
		
		if($('#id_items-'+j+'-importe').val()!="")
		{
			b =$('#id_items-'+j+'-importe').val();
			
			a +=parseFloat(b);	
			
		}
		
	}
        
	$('#id_importe').val(Math.round(a*100)/100);
	'''
	
js_calcular_pagado = u'''
	var a=0;
	var j = 0;
	for(j=0;j< parseInt($('#id_cheques-TOTAL_FORMS').val());j++)
	{
		if($('#id_cheques-'+j+'-importe').val()!="")
		{
			a +=parseFloat($('#id_cheques-'+j+'-importe').val());	
		}
		
	}
	if($('#id_efectivo').val()!='')
	{
		a =  parseFloat($('#id_efectivo').val()) + parseFloat(a) ;
	}
        for(j=0;j< parseInt($('#id_retenciones-TOTAL_FORMS').val());j++)
	{
		
		if($('#id_retenciones-'+j+'-importe').val()!="")
		{
			b =$('#id_retenciones-'+j+'-importe').val();
			
			a +=parseFloat(b);	
			
		}
		
	}
	a =  parseInt(a*100)/100.0;
	$('#id_pagado').val(parseFloat(a));
	'''

class Recibo(Pago):
	contacto = AutocompleteField(Contacto, ['nombre', 'cuit']) #, related_name ="recibos")
	importe = CalculatedField(models.FloatField,source = ['items.importe'], js=ss,blank=True,null=True)
	pagado = CalculatedField(models.FloatField,source=['cheques.importe','efectivo'],optional_source=['retenciones.importe'], js=js_calcular_pagado) 
	total = CalculatedField(models.FloatField,source = ['importe'],optional_source=['descuento','recargo'],js = "importe - descuento + recargo",blank=True,null=True)
	
	def get_tipo(self):
		return "Recibo"
        
	def __unicode__(self):
		if self.fecha:
			return "recibo a %s por %s el %s" %(self.contacto,str(self.importe),self.fecha.strftime("%d/%m/%Y")) 
		else: return ""
        class Meta:
          ordering = ['-comprobante']
		
    

        
class ItemRecibo(models.Model):
	concepto = AutocompleteField( Pago,['comprobante'], related_name="pagos")
	recibo = models.ForeignKey(Recibo, related_name="items")
	fecha = CalculatedField(source = ['concepto'], server = "Pago.objects.get(id=concepto).get_fecha()")
	saldo = CalculatedField(source = ['concepto'], server = "Pago.objects.get(id=concepto).get_saldo()")
	importe = models.FloatField()	
	def comprobante(self):
		return self.recibo.comprobante
	def recibo_fecha(self):
		return self.recibo.fecha
        
        def __unicode__(self):
            return "%s" % self.recibo.comprobante
	
class ItemRetencion(models.Model):
	concepto_retencion = models.CharField(max_length=30)
	recibo = models.ForeignKey(Recibo, related_name="retenciones")
	importe = models.FloatField()	
	
	
